package edu.jiangxuan.up.spi;

import java.util.List;
import edu.jiangxuan.up.service.MyServiceLoader;

/**
 * 主程序 - 演示SPI机制的使用
 */
public class Main {
    public static void main(String[] args) {
        System.out.println("=== Java SPI 机制演示 ===\n");
        
        // 1. 使用JDK自带的ServiceLoader
        System.out.println("1. 使用JDK自带的ServiceLoader:");
        LoggerService loggerService = LoggerService.getService();
        loggerService.info("这是一条info日志");
        loggerService.debug("这是一条debug日志");
        
        System.out.println("\n发现的所有Logger实现:");
        for (Logger logger : loggerService.getLoggerList()) {
            System.out.println("- " + logger.getClass().getName());
        }
        
        System.out.println("\n" + "=".repeat(50) + "\n");
        
        // 2. 使用自定义的MyServiceLoader
        System.out.println("2. 使用自定义的MyServiceLoader:");
        MyServiceLoader<Logger> myLoader = MyServiceLoader.load(Logger.class);
        List<Logger> providers = myLoader.getProviders();
        
        System.out.println("加载到的Logger实现数量: " + providers.size());
        for (Logger logger : providers) {
            System.out.println("实现类: " + logger.getClass().getName());
            logger.info("自定义加载器测试 - info");
            logger.debug("自定义加载器测试 - debug");
            System.out.println();
        }
        
        System.out.println("=== SPI机制演示完成 ===");
    }
}
